package tech.aistar.day08;

/**
 * 本类用来演示: 枚举类型
 *
 * @author: success
 * @date: 2022/7/27 9:44 上午
 */
public enum EnumDemo {
    //枚举常量-每个枚举常量都是代表这个枚举类型的唯一实例

    //public static final EnumDemo F = new EnumDemo();
    //F,
    //
    //M;

    F("女"),//public static final EnumDemo F = new EnumDemo("女");
    M("男");

    private String sign;

    public String getSign() {
        return sign;
    }

    EnumDemo(){
        System.out.println("EnumDemo空参构造...");
    }

    EnumDemo(String sign){
        this.sign = sign;
        System.out.println("EnumDemo带参构造...");
    }
}
class EnumDemoTest{
    public static void main(String[] args) {
        //获取单个枚举常量
        EnumDemo f1 = EnumDemo.F;
        EnumDemo f2 = EnumDemo.F;
        System.out.println(f1 == f2);//true
        //EnumDemo m = EnumDemo.M;

        System.out.println(f1);//F

        //2. 获取枚举类型的对应的值
        System.out.println(f1.getSign());

        //3. 获取所有的枚举常量
        EnumDemo[] enumDemos = EnumDemo.values();
        for (EnumDemo enumDemo : enumDemos) {
            System.out.println(enumDemo+":"+enumDemo.getSign());
        }

        //4. 应用
        //字符串到枚举类型的绑定
        //如何设计 - 状态性的东西 - 设计成枚举常量
        //前端表单页面 - 单选按钮
        //<input type='radio' name='gender' value='F'>女
        //<input type='radio' name='gender' value='M'>男
        //提交 - 后端拿到的是F,M这俩个字符串
        String gender = "F";
        //字符串转换成对应的枚举类型
        //前提 - 字符串的值一定要能够匹配到枚举类型中的常量名称
        EnumDemo sex = Enum.valueOf(EnumDemo.class,gender);
        Student s2 = new Student(2,"tom",sex);
        System.out.println(s2);


        //枚举类型直接赋值 - 单元测试中 - 模拟了一个数据
        Student s1 = new Student(1,"admin",EnumDemo.M);
        System.out.println(s1);
    }
}